//! 错误处理模块

use thiserror::Error;

/// DataForge 错误类型
#[derive(Debug, Error)]
pub enum DataForgeError {
    #[error("配置错误: {0}")]
    ConfigError(String),

    #[error("生成器错误: {0}")]
    GeneratorError(String),

    #[error("正则表达式错误: {0}")]
    RegexError(#[from] regex::Error),

    #[error("JSON序列化错误: {0}")]
    JsonError(#[from] serde_json::Error),

    #[error("模板渲染错误: {0}")]
    TemplateError(#[from] handlebars::RenderError),

    #[cfg(feature = "database")]
    #[error("数据库操作失败: {0}")]
    DatabaseError(#[from] sqlx::Error),

    #[error("并发任务超时")]
    TimeoutError,

    #[error("数据验证失败: {0}")]
    ValidationError(String),

    #[error("IO错误: {0}")]
    IoError(#[from] std::io::Error),
}

/// DataForge 结果类型
pub type Result<T> = std::result::Result<T, DataForgeError>;

impl DataForgeError {
    /// 创建配置错误
    pub fn config<S: Into<String>>(msg: S) -> Self {
        Self::ConfigError(msg.into())
    }

    /// 创建生成器错误
    pub fn generator<S: Into<String>>(msg: S) -> Self {
        Self::GeneratorError(msg.into())
    }

    /// 创建验证错误
    pub fn validation<S: Into<String>>(msg: S) -> Self {
        Self::ValidationError(msg.into())
    }
}